Cấu trúc trang Ogg

Sau đây là cách bố trí trường của tiêu đề trang Ogg:

Bố cục trường của tiêu đề trang OggCapture pattern - 32 bitMẫu chụp hoặc mã đồng bộ hóa là một số ma thuật được sử dụng để đảm bảo đồng bộ hóa khi phân tích file Ogg. Mỗi trang bắt đầu với bốn chuỗi ký tự ASCII, "OggS". Điều này hỗ trợ đồng bộ hóa trình phân tích cú pháp trong trường hợp dữ liệu bị mất hoặc bị hỏng và là kiểm tra độ tỉnh táo trước khi bắt đầu phân tích cấu trúc trang.Version - 8 bitTrường này cho biết phiên bản của định dạng dòng bit Ogg, để cho phép mở rộng trong tương lai. Nó hiện đang được ủy quyền là 0.Header type - 8 bitĐây là trường cờ 8 bit, cho biết loại trang tiếp theo.
BitGiá trịCờLoại trang
00x01Tiếp tụcGói đầu tiên trên trang này là sự tiếp nối của gói trước đó trong luồng bit logic.
10x02BOSBắt đầu dòng. Trang này là trang đầu tiên trong dòng bit logic. Cờ BOS phải được đặt trên trang đầu tiên của mỗi dòng bit logic và không được đặt trên bất kỳ trang nào khác.
20x04EOSKết thúc dòng. Trang này là trang cuối cùng trong dòng bit logic. Cờ EOS phải được đặt trên trang cuối cùng của mỗi dòng bit logic và không được đặt trên bất kỳ trang nào khác.
Granule position - 64 bitGranule position là điểm đánh dấu thời gian trong các file Ogg. Nó là một giá trị trừu tượng, có ý nghĩa được xác định bởi codec. Ví dụ, nó có thể là số lượng mẫu, số khung hoặc sơ đồ phức tạp hơn.Bitstream serial number - 32 bitTrường này là một số sê-ri xác định một trang thuộc về dòng bit logic cụ thể. Mỗi dòng bit logic trong một file có một giá trị duy nhất và trường này cho phép các cài đặt phân phối các trang đến bộ giải mã thích hợp. Trong file Vorbis và Theora điển hình, một luồng là âm thanh (Vorbis) và luồng còn lại là video (Theora)Page sequence number - 32 bitTrường này là một trường tăng đơn điệu cho mỗi dòng bit logic. Trang đầu tiên là 0, trang thứ hai, v.v. Điều này cho phép thực hiện để phát hiện khi dữ liệu bị mất.Checksum - 32 bitTrường này cung cấp checksum CRC32 của dữ liệu trong toàn bộ trang (bao gồm tiêu đề trang, được tính toán với trường tổng kiểm tra được đặt thành 0). Điều này cho phép xác minh rằng dữ liệu đã không bị hỏng kể từ khi nó được tạo. Các trang không kiểm tra được nên được loại bỏ. Tổng kiểm tra được tạo bằng giá trị đa thức 0x04C11DB7.Page segments - 8 bitTrường này cho biết số lượng phân đoạn tồn tại trong trang này. Nó cũng cho biết có bao nhiêu byte trong bảng phân đoạn theo trường này. Có thể có tối đa 255 phân đoạn trong bất kỳ một trang nào.Segment tableSegment table (Bảng phân đoạn) là một vectơ của các giá trị 8 bit, mỗi giá trị biểu thị độ dài của phân đoạn tương ứng trong thân trang. Số lượng phân đoạn được xác định từ trường Phân đoạn trang trước đó. Mỗi phân đoạn có độ dài từ 0 đến 255 byte.

Các phân đoạn cung cấp một cách để nhóm các phân đoạn thành các gói, là các đơn vị dữ liệu có ý nghĩa cho bộ giải mã. Khi độ dài của đoạn được chỉ định là 255, điều này cho biết rằng đoạn sau sẽ được nối với đoạn này và là một phần của cùng một gói. Khi độ dài của phân đoạn là 0-254, điều này cho thấy phân khúc này là phân khúc cuối cùng trong gói này. Trong đó độ dài của gói là bội số của 255, đoạn cuối cùng là độ dài 0.

Trường hợp gói cuối cùng tiếp tục ở trang tiếp theo, giá trị phân đoạn cuối cùng là 255 và cờ tiếp tục được đặt ở trang sau để chỉ ra rằng bắt đầu của trang mới là phần tiếp theo của trang cuối.